package com.cskaoyan.javase.array._4operation._2reverse;

import java.util.Arrays;

/**
 * 数组的逆序
 * 在开发中,逆序很少见,了解即可.
 *
 * 数组的逆序（reverse），即颠倒数组中元素的顺序，
 * 比如[1,2,3] --> [3,2,1]
 * 这个操作可以在原先数组上直接完成,是不需要创建新数组.
 *
 * 在原数组的数组上改变元素顺序：
 * 即下标为"0"和"length-1"位置的元素互换，
 * 下标为"1"和"length-2"位置的元素互换....
 * 即，把下标为"i"和"length-1-i"元素互换即可！
 * 但是注意：只需要交换一半数组的元素即可，不要遍历整个数组，会再交换回去！！
 *
 * @since 16:31
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        System.out.println("逆序之前:"+ Arrays.toString(arr));
        reverse(arr);
        System.out.println("逆序之后:"+ Arrays.toString(arr));

    }

    // 数组元素的逆序,以int元素数组为例
    public static void reverse(int[] arr) {
        // 遍历数组,交换数组元素
        /*
            增强for没有数组下标,且增强for不能修改元素取值
            所以不能用增强for
         */
        for (int i = 0; i < arr.length / 2; i++) {
            // 把下标为"i"和"length-1-i"元素互换
            /*
                程序中交换变量,需要中间变量,保存被覆盖的变量取值
                需要一个temp
             */
            // 先用temp保存被覆盖的变量
            int temp = arr[i];
            // 交换,覆盖
            arr[i] = arr[arr.length - 1 - i];
            // 然后将另外一个变量,同temp赋值
            arr[arr.length - 1 - i] = temp;
        }
    }
}
